import dayjs from 'dayjs';
import { toolGetPropertyType } from '@/utils';
// 格式化工具函数

/**
 * 格式化日期(通用)： YYYY/MM/DD HH:mm:ss ...
 * 如果传入的值为undefined / null 则直接返回 '-'
 * @param val
 * @returns @string
 */
export const formatDate = (val: number, formatter = 'YYYY/MM/DD') => (val ? dayjs.unix(val).format(formatter) : '-');

/**
 * 格式化日期(带时间)： YYYY/MM/DD HH:mm:ss
 * @param val
 * @returns @string
 */
export const formatDateTime = (val: number) => formatDate(val, 'YYYY/MM/DD HH:mm:ss');

/**
 * 格式化价格
 * @param val
 * @returns @string
 */
export const formatPrice = (val: number) => {
  if (typeof val !== 'number') return '-';
  return '￥' + (val / 1000).toLocaleString('en-US', { maximumFractionDigits: 2 });
};
/**
 * 格式化 数值为分的价格
 * @param val
 * @returns @string
 */
export const formatPriceCent = (val: number, symbol=true) => {
  if (typeof val !== 'number') return '-';
  return `${symbol?'￥':''}${(val / 100).toLocaleString('en-US', { maximumFractionDigits: 2 })}` ;
};
/**
 * 格式化 单位为元的价格
 * @param val
 * @returns @string
 */
export const formatPriceUnit = (val: number) => {
  if (typeof val !== 'number') return '-';
  return '￥' + val.toLocaleString('en-US', { maximumFractionDigits: 2 });
};

/**
 * 小数转百分数 带%
 * @param val
 * @param place
 * @returns @string
 */
export function formatPercentUnit(val: any, place = 2) {
  if (typeof val !== 'number') {
    return '--';
  }
  if (val === 0) return '0%';
  return (val * 100).toFixed(place) + '%';
}
/**
 * 小数转百分数
 * @param val
 * @param place
 * @returns @string
 */
export function formatPercent(val: any, place = 2) {
  if (typeof val !== 'number') {
    return null;
  }
  return (val * 100).toFixed(place);
}
/**
 * 转换为几天或几时，分
 * @param val
 * @returns @array
 */
export const formatDayStrArr = (seconds: number) => {
  const day = Math.floor(seconds / (3600 * 24));
  let hours: any = Math.floor((seconds - day * (3600 * 24)) / 3600);
  let minutes: any = Math.floor((seconds - day * (3600 * 24) - hours * 3600) / 60);

  let str = '';
  const days = day > 0 ? day + '天' : '';
  if (day > 0 || hours > 0) {
    hours = hours < 10 ? '0' + hours : hours;
    str += hours + '时';
  }
  if (day > 0 || hours > 0 || minutes > 0) {
    minutes = minutes < 10 ? '0' + minutes : minutes;
    str += minutes + '分';
  }

  return [days, str];
};
/**
 * @description 转换手机号为隐私手机号
 * @param val 13201234123
 * @returns string 132****4123
 */
export const formatPrivateMobile = (val: string) => {
  return val.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
};

/**
 * @description 将所有Select组件的异常值转换成默认值
 * @param [key, defaultValue][] 格式为 [字段， 默认值] 的数组集合
 * @param params params值
 */
export const formatParamsSelectVal = (keyVals, params) => {
  if (toolGetPropertyType(keyVals) === 'Array') {
    if (keyVals?.length) {
      keyVals?.forEach((item) => {
        if (toolGetPropertyType(item) === 'Array') {
          /** [字段名，默认值] */
          const [key, val] = item ?? [];
          /** 此处将处理配置了clearable 的Select组件的值，在执行clear操作后赋值空字符串，进而传空字符串引起的后端报错 */
          if ((toolGetPropertyType(params[key]) === 'String' && !params[key].length) || toolGetPropertyType(params[key]) === 'Undefined') {
            params[key] = val;
          }
        }
      });
    }
  }
  return params;
};
